Dans ce projet, nous regarderons l’espérance de vie des hommes et des femmes dans 170 pays, nous ferons des cartes du monde et des barplots interactifs, pour rendre la visualisation plus compréhensible…
données sur l’espérance de vie des femmes et des hommes au niveau mondial en 2019. (Ces données ont été collectées sur différents sites Web, elles contenaient plusieurs valeurs manquantes qui ont été complétées à la main).
countries <- read.csv("https://gist.githubusercontent.com/tadast/8827699/raw/f5cac3d42d16b78348610fc4ec301e9234f82821/countries_codes_and_coordinates.csv")
# Ces données n'étaient pas dans un fichier CSV, j'ai donc dû copier-coller
femme=c("66.388", "67.679", "80.201", "78.133", "83.4", "64.039", "76.759", "79.995", "78.516", "85", "84.2", "75.455", "78.423", "74.595", "79.4", "84", "63.324", "72.176", "74.508", "79.857", "72.386", "79.555", "78.5", "62.294", "63.377", "71.909", "60.561", "84.2", "76.197", "55.514", "82.442", "79.244", "83.032", "80.019", "66.121", "66.023", "62.233", "75.744", "86.3", "82.893", "59.119", "81.6", "80.779", "83.2", "69.357", "77.381", "74.35", "79.314", "79.838", "68.555", "86.2", "82.8", "64.845", "81.4", "68.536", "84.5", "85.6", "68.669", "63.481", "78.14", "65.177", "84.5", "77.151", "62.117", "59.918", "60.213", "73.095", "66.182", "77.551", "79.3", "70.95", "73.967", "72.652", "77.885", "84.3", "84.2", "84.7", "85.4", "76.118", "87.45", "76.306", "77.3", "69.049", "75.8", "76.58", "69.746", "57.58", "79.9", "80.869", "65.497", "75.951", "81", "84.7", "77.846", "68.682", "78.317", "67.413", "60.085", "77.895", "77.56", "66.515", "77.879", "76.157", "74.142", "63.671", "70.119", "66.516", "72.208", "77.982", "63.621", "55.619", "84.7", "83.5", "80.343", "65.622", "73.829", "68.287", "81.756", "65.82", "76.396", "83.6", "79.507", "75.505", "81.8", "83.5", "82.01", "83.1", "78.17", "71.132", "77.842", "69.918", "55.495", "85.7", "80.8", "84.2", "59.132", "67.187", "59.383", "80.261", "84.7", "85.6", "75.063", "78.103", "73.389", "67.233", "55.669", "82.1", "80.9", "61.918", "76.224", "78.721", "71.717", "80.563", "76.98", "81.478", "76.004", "79.523", "67.826", "66.891", "62.899", "79.3", "73.095", "80.4", "77.843", "78.4", "79.303", "74.8", "84.2", "64.85", "77.6")
homme=c("63.382", "60.726", "77.002", "75.676", "78.6", "58.416", "73.935", "73.242", "71.327", "80.9", "79.5", "70.511", "76.436", "70.877", "69.3", "79.6", "60.201", "71.405", "68.684", "74.893", "66.485", "72.243", "71.5", "60.739", "59.764", "67.538", "58.029", "80", "69.526", "51.081", "77.771", "74.761", "78.921", "74.528", "62.587", "63.082", "59.147", "68.615", "80.3", "77.739", "56.593", "75.4", "76.84", "79.3", "65.116", "70.991", "69.742", "77.291", "74.282", "64.153", "80.9", "74.4", "56.007", "76.3", "64.694", "79.2", "79.7", "64.382", "60.656", "69.349", "62.991", "79.5", "71.382", "60.855", "57.743", "56.305", "66.927", "61.831", "72.96", "72.9", "68.464", "69.572", "68.565", "75.593", "80.4", "81", "81", "81.1", "72.868", "81.41", "72.839", "68.82", "64.313", "67.6", "74.76", "66.142", "51.201", "70.8", "77.14", "62.715", "70.097", "71.5", "80.3", "73.794", "65.417", "74.234", "61.101", "58.529", "75.423", "71.07", "63.305", "72.203", "67.624", "65.799", "57.782", "64.046", "60.685", "69.259", "70.944", "61.281", "53.789", "81.2", "80", "76.127", "61", "69.592", "66.337", "75.421", "63.271", "72.263", "80.5", "74.06", "67.263", "74.1", "78", "79.142", "79.4", "68.24", "66.821", "68.455", "65.757", "53.853", "81.4", "74.3", "78.5", "55.725", "63.467", "56.351", "73.596", "81.3", "81.9", "68.468", "67.941", "68.935", "63.643", "52.835", "76.3", "73.46", "60.152", "70.874", "74.688", "64.705", "74.724", "66.92", "74.119", "68.327", "71.301", "64.443", "60.848", "59.798", "71.8", "66.927", "75", "71.65", "73.1", "74.441", "70.3", "77.7", "56.01", "72.416")
code=c("AFG", "ZAF", "ALB", "DZA", "DEU", "AGO", "SAU", "ARG", "ARM", "AUS", "AUT", "AZE", "BHR", "BGD", "BLR", "BEL", "BEN", "BTN", "BOL", "BIH", "BWA", "BRA", "BGR", "BFA", "BDI", "KHM", "CMR", "CAN", "CPV", "CAF", "CHL", "CHN", "CYP", "COL", "COM", "COG", "COD", "PRK", "KOR", "CRI", "CIV", "HRV", "CUB", "DNK", "DJI", "DOM", "EGY", "ARE", "ECU", "ERI", "ESP", "EST", "SWZ", "USA", "ETH", "FIN", "FRA", "GAB", "GMB", "GEO", "GHA", "GRC", "GTM", "GIN", "GNQ", "GNB", "GUY", "HTI", "HND", "HUN", "IND", "IDN", "IRQ", "IRN", "IRL", "ISL", "ISR", "ITA", "JAM", "JPN", "JOR", "KAZ", "KEN", "KGZ", "KWT", "LAO", "LSO", "LVA", "LBN", "LBR", "LBY", "LTU", "LUX", "MKD", "MDG", "MYS", "MWI", "MLI", "MAR", "MUS", "MRT", "MEX", "MDA", "MNG", "MOZ", "MMR", "NAM", "NPL", "NIC", "NER", "NGA", "NOR", "NZL", "OMN", "UGA", "UZB", "PAK", "PAN", "PNG", "PRY", "NLD", "PER", "PHL", "POL", "PRT", "QAT", "GBR", "RUS", "RWA", "SLV", "SEN", "SLE", "SGP", "SVK", "SVN", "SOM", "SDN", "SSD", "LKA", "SWE", "CHE", "SUR", "SYR", "TJK", "TZA", "TCD", "CZE", "THA", "TGO", "TTO", "TUN", "TKM", "TUR", "UKR", "URY", "VEN", "VNM", "YEM", "ZMB", "ZWE", "ROU", "GUF", "FRA", "BLZ", "SRB", "MNE", "XXK", "TWN", "SWZ", "PSE")
nom=c("Afghanistan", "Afrique du Sud", "Albanie", "Algérie", "Allemagne", "Angola", "Arabie Saoudite", "Argentine", "Arménie", "Australie", "Autriche", "Azerbaïdjan", "Bahreïn", "Bangladesh", "Belarus", "Belgique", "Bénin ", "Bhoutan", "Bolivie", "Bosnie-Herzégovine", "Botswana", "Brésil", "Bulgarie", "Burkina Faso", "Burundi", "Cambodge", "Cameroun", "Canada", "Cap-Vert", "Centrafricaine (rep)", "Chili", "Chine", "Chypre", "Colombie", "Comores(Les)", "Congo", "Congo (rep. dem.)", "Corée du Nord", "Corée du Sud", "Costa Rica", "Côte d'Ivoire", "Croatie", "Cuba", "Danemark", "Djibouti", "Dominicaine (Rep)", "Égypte", "Émirats arabes unis", "Équateur", "Érythrée", "Espagne", "Estonie", "Eswatini", "États-Unis", "Éthiopie", "Finlande", "France", "Gabon", "Gambie", "Géorgie", "Ghana", "Grèce", "Guatemala", "Guinée", "Guinée équatoriale", "Guinée-Bissau", "Guyana", "Haïti", "Honduras", "Hongrie", "Inde", "Indonésie", "Irak", "Iran", "Irlande", "Islande", "Israël", "Italie", "Jamaïque", "Japon", "Jordanie", "Kazakhstan", "Kenya", "Kirghizstan", "Koweït", "Laos", "Lesotho", "Lettonie", "Liban", "Liberia", "Libye", "Lituanie", "Luxembourg", "Macédoine du Nord", "Madagascar", "Malaisie", "Malawi", "Mali", "Maroc", "Maurice", "Mauritanie", "Mexique", "Moldavie", "Mongolie", "Mozambique", "Myanmar", "Namibie", "Népal", "Nicaragua", "Niger", "Nigeria", "Norvège", "Nouvelle-Zélande", "Oman", "Ouganda", "Ouzbékistan", "Pakistan", "Panama", "Papouasie-Nouvelle-G.", "Paraguay", "Pays-Bas", "Pérou", "Philippines", "Pologne", "Portugal", "Qatar", "Royaume-Uni", "Russie", "Rwanda", "Salvador", "Sénégal", "Sierra Leone", "Singapour", "Slovaquie", "Slovénie", "Somalie", "Soudan", "Soudan du Sud", "Sri Lanka", "Suède", "Suisse", "Suriname", "Syrie", "Tadjikistan", "Tanzanie", "Tchad", "Tchèque (Rép)", "Thaïlande", "Togo", "Trinité-et-Tobago", "Tunisie", "Turkménistan", "Turquie", "Ukraine", "Uruguay", "Venezuela", "Vietnam", "Yémen", "Zambie", "Zimbabwe", "Roumanie", "Guyane Française", "Nouvelle Calédonie", "Belize", "Serbie", "Monténégro", "Kosovo", "Taîwan", "Swaziland", "Palestine")
name=c("Afghanistan", "South Africa", "Albania", "Algeria", "Germany", "Angola", "Saudi Arabia", "Argentina", "Armenia", "Australia", "Austria", "Azerbaijan" , "Bahrain", "Bangladesh", "Belarus", "Belgium", "Benin", "Bhutan", "Bolivia", "Bosnia and Herzegovina", "Botswana", "Brazil", "Bulgaria", "Burkina Faso", "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde", "Central African Republic", "Chile", "China", "Cyprus", "Colombia", "Comoros", "Republic of Congo", "Democratic Republic of the Congo", "North Korea", "South Korea", "Costa Rica", "Ivory Coast", "Croatia", "Cuba", "Denmark", "Djibouti", "Dominican Republic", "Egypt", "United Arab Emirates", "Ecuador", "Eritrea", "Spain", "Estonia", "Eswatini", "USA", "Ethiopia", "Finland", "France", "Gabon", "Gambia", "Georgia", "Ghana", "Greece", "Guatemala", "Guinea", "Equatorial Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Honduras", "Hungary", "India", "Indonesia", "Iraq", "Iran", "Ireland", "Iceland", "Israel", "Italy", "Jamaica", "Japan", "Jordan", "Kazakhstan" , "Kenya", "Kyrgyzstan", "Kuwait", "Laos", "Lesotho", "Latvia", "Lebanon", "Liberia", "Libya", "Lithuania", "Luxembourg", "North Macedonia", "Madagascar", "Malaysia", "Malawi", "Mali", "Morocco", "Mauritius", "Mauritania", "Mexico", "Moldova", "Mongolia", "Mozambique", "Myanmar", "Namibia", "Nepal", "Nicaragua", "Niger", "Nigeria", "Norway", "New Zealand", "Oman", "Uganda", "Uzbekistan", "Pakistan", "Panama", "Papua New Guinea", "Paraguay", "Netherlands", "Peru", "Philippines", "Poland", "Portugal", "Qatar", "UK", "Russia", "Rwanda", "El Salvador", "Senegal", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Somalia", "Sudan", "South Sudan", "Sri Lanka", "Sweden", "Switzerland", "Suriname", "Syria", "Tajikistan", "Tanzania", "Chad", "Czech Republic", "Thailand", "Togo", "Trinidad and Tobago", "Tunisia", "Turkmenistan", "Turkey", "Ukraine", "Uruguay", "Venezuela", "Vietnam", "Yemen", "Zambia", "Zimbabwe", "Romania", "French Guiana", "New Caledonia", "Belize", "Serbia", "Montenegro", "Kosovo", "Taiwan", "Swaziland", "Palestine")
data <- data.frame(code,nom,name,femme = as.numeric(femme), homme = as.numeric(homme))
summary(data)
## code nom name femme
## Length:170 Length:170 Length:170 Min. :55.49
## Class :character Class :character Class :character 1st Qu.:68.54
## Mode :character Mode :character Mode :character Median :77.07
## Mean :74.76
## 3rd Qu.:80.72
## Max. :87.45
## homme
## Min. :51.08
## 1st Qu.:64.33
## Median :70.88
## Mean :69.83
## 3rd Qu.:75.42
## Max. :81.90
On peut remarque que la moyenne de l’espérance de vie des femmes (variable femme) est supérieur à celle des hommes (variable homme) d’àprès le summary().
# donnée de la map
mapworld <- map_data("world") %>%
filter(region != "Antarctica",
region != "Greenland")
# Jointures
esp_vie <- data %>%
left_join(countries, by = c("name" = "Country")) %>%
select(code, nom, name, femme, homme) %>%
full_join(mapworld, by = c("name" = "region"))
Palettes :
On génère quelques palette qu’on utilisera…
palette1 <- paste0("#", c("b5c99a", "9CC5A1", "49A078", "216869"))
palette2 <- paste0("#", c("b5e48c", "76c893", "34a0a4", "1a759f"))
palette3 <- paste0("#", c("cad2c5", "84a98c", "52796f", "354f52"))
palette_gradient <- c("#dbd5a4", "#354f52")
palette_gradient2 <- c("#95f9c3", "#0b3866")
palette_gradient3 <- c("#faae7b", "#432371")
palette_gradient4 <- c("#F3E69Bff", "#F79D7Fff", "#E2778Aff", "#B05D9Cff")
Nous faisons un graphique représentant la carte du monde avec l’espérance de vie des femmes dans chaque pays, plus la couleur est foncée, plus l’espérance de vie des femmes est grande.
Ce graphique est bien interactif, donc en cliquant sur un pays vous trouverez les données exactes (nom du pays et l’espérance de vie des femmes pour ce pays). Vous pouvez même zoomer en sélectionnant une partie avec le curseur sur la carte pour mieux visualiser les pays un peu plus petits…
gg <- esp_vie %>%
ggplot(aes(x = long, y = lat, group = group)) +
geom_polygon(aes(fill = femme,
text = paste("Pays: ", name, "(",nom,")",
"<br>",
"Espérance de vie:", femme, " ans"))) +
scale_fill_gradientn(colours = palette_gradient3,
name = "Age",
labels = c("≤73.97 ans", "≤79.24 ans", "≤83.7 ans", "≤87.45 ans")) +
# fond du plot
theme(panel.background = element_rect("#20252C"),
plot.background = element_rect("#20252C"),
legend.background = element_rect("#20252C")) +
# legend
theme(legend.position = "bottom") +
# on enlève la grid et les axes
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank()) +
theme(axis.ticks = element_blank(),
axis.text = element_blank()) +
xlab("") + ylab("") +
# titre du plot
ggtitle("Espérance de vie chez les femmes") +
theme(plot.title = element_text(hjust = 0.5, size = 20, color = "#DCE1DE"),
text = element_text(color = "#DCE1DE")) +
theme(plot.margin = unit(c(1, 0, 0, 0), "cm")) +
theme(legend.position = c(0.12, 0.25))
## Warning: Ignoring unknown aesthetics: text
ggplotly(gg, tooltip = "text")
rm(countries, mapworld, gg)
On fait pareil pour les hommes, on effectue un graphique interactif représentant l’espérance de vie des hommes dans chaque pays.
Plus la couleur est foncée, plus l’espérance de vie chez les hommes est grande.
## Warning: Ignoring unknown aesthetics: text
On s’intéresse maintenant à la différence d’espérance de vie moyenne des femmes et des hommes, on aimerait voir dans quel pays l’espérance de vie moyenne des femmes est supérieure à celle des hommes et inversement.. .
On crée alors une nouvelle variable femme-homme :
si femme-homme > 0 : donc l’espérance de vie des femmes est supérieure à celle des hommes, donc le pays sera coloré en violet. Si cette différence est vraiment grande alors la couleur sera plus foncée sinon elle sera claire.
si femme-homme < 0 : donc l’espérance de vie des hommes est supérieure à celle des femmes, donc le pays sera coloré en bleu. Si cette différence est vraiment grande alors la couleur sera plus foncée sinon elle sera claire.
si femme-homme = 0 : donc l’espérance de vie des hommes est égale à celle des femmes, donc le pays sera coloré en blanc.
esp_vie <- esp_vie %>%
mutate(homme_et_femme = round(femme-homme, 3))
## Warning: Ignoring unknown aesthetics: text
On va s’interesser maintenant à l’espérance de vie chez les hammes et les femmes pour chaque continent.
Pour cela on doit importer des données correspondant au continent des pays et les joindre à notre jeu de données.
Continents :
continent <- read.csv("continents2.csv.xls") %>%
select(country = name, alpha.3, region, sub.region)
Jointure :
barplot_data <- data %>%
left_join(continent, by = c("code" = "alpha.3"))
# On ajoute la moyenne d'espérance des femmes et hommes pour chaque continent
# dans nos données.
moyenne_par_continent <- barplot_data %>%
left_join(barplot_data %>%
group_by(region) %>%
summarise(moy_femme_conti = mean(femme), moy_homme_conti = mean(homme)) %>%
transmute(region, moy_femme_conti, moy_homme_conti),
by = "region")
barplots_data <- moyenne_par_continent %>%
data.frame(esp_vie = as.numeric(c(femme,homme))) %>%
mutate(sexe = rep(c("femme", "homme"), each = 170))
barplots_data$moy_conti = as.numeric(c(moyenne_par_continent$moy_femme_conti,
moyenne_par_continent$moy_homme_conti))
# vérification :
barplots_data$moy_conti[171] == barplots_data$moy_homme_conti[1]
## [1] TRUE
barplots_data <- na.omit(barplots_data)
# barplots_data$esp_vie[171] == barplots_data$homme[1]
Graphique de gauche :
Graphique de droite :
Exemple, pour l’Europe :
Ce graphique est bien interatif, vous pouvez :
Pour tout les continents ensemble.
On fait pareil mais avec les autres continents puis on les regroupent tous dans un seul graphique.
subplot(stat_asie,
stat_afrique,
stat_amerique,
stat_europe,
stat_oceanie,
nrows = 5)
On constate que quel que soit le continent ou le pays, l’espérance de vie des femmes est supérieur à celle des hommes en 2019.
D’après la troisième carte, on a vu qu’il n’y avait pas de couleur bleue ce qui veut dire qu’il n’y a aucun pays dont l’espérance de vie des hommes est supérieur à celle des femmes.
Pareillement pour les barplots, on remarque que les barres violettes dépassent toujours les barres en bleu ciels, on aboutit donc à la même conclusion.